package xyz.mumuwei.youthcourseserver.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * @author mumuwei
 * @since 2022-02-19
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Authority implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 设定路由的name
     */
    @NotBlank(message = "路由名不能为空！")
    private String name;

    /**
     * 菜单url
     */
    private String path;

    /**
     * 二级菜单所对应组件列表
     */
    @NotBlank(message = "路由组件路径不能为空！")
    private String component;

    /**
     * 图标
     */
    private String iconName;

    /**
     * 如果设置为true，则不会被 <keep-alive> 缓存(默认 false)
     */
    private Boolean noCache;

    /**
     * 当设置 true 的时候该路由不会在侧边栏出现 如401，login等页面，或者如一些编辑页面/edit/1
     */
    private Boolean hidden;

    /**
     * 一直显示根路由， 0:不显示 ， 1：一直显示
     */
    private Boolean alwaysShow;

    /**
     * 设置该路由在侧边栏和面包屑中展示的名字
     */
    @NotBlank(message = "菜单名不能为空！")
    private String title;

    /**
     * 重定向地址，在面包屑中点击会重定向去的地址
     */
    private String redirect;

    /**
     * 如果设置为false，则不会在breadcrumb面包屑中显示(默认 true)
     */
    private Boolean breadcrumb;

    /**
     * 如果设置为true，它则会固定在tags-view中(默认 false)
     */
    private Boolean affix;

    /**
     * 当路由设置了该属性，则会高亮相对应的侧边栏。
     */
    private String activeMenu;

    /**
     * 父权限id
     */
    private Integer parentId;

    /**
     * 权限描述
     */
    private String remarks;

    /**
     * 权限编码
     */
    @NotBlank(message = "权限编码不能为空！")
    private String permission;

    /**
     * 菜单层级
     */
    private Integer level;

    /**
     * 状态: 0：正常,  1：锁定
     */
    private Integer state;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private String createTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateTime;

    /**
     * 逻辑删除: 0：正常,  1：删除
     */
    @TableLogic
    private Integer isDelete;

    @TableField(exist = false)
    private List<Authority> children = new ArrayList<>();

}
